// test_task.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "testlib.h"

// пример использования библиотечных вызовов
// обработка ошибок не оговаривалась, поэтому get_next() в случае ошибки возвращает NULL
// для валидации входного ID используется validate_id(), которую можно опустить, если программист уверен, что ID валидный
// строка, возвращаемая вызоыом get_next() должна быть освобождена во избежание утечек памяти

int main()
{
    const char* id1 = "A1-A2-A9-B1-C1-P4-K9-Z9";
    const char* id2 = "D1-E1-C1-P4-K9-45";              // invalid ID
    const char* id3 = "Z9-Z9";                          // carry case
    const char* id4 = "Z9-Z9-Z9-Z9-Z9-Z9-Z9-Z9-Z9-Z9";  // maximal possible
    // не должны присутствовать буквы "D", "F", "G", "J", "M", "Q", "V", и цифра "0".
    

    bool valid = validate_id(id1);
    if(!valid) puts("invalid id1!");
    else {
        char* id1k = get_next(id1);
        if (id1k) {
            printf("next of id1 is %s\n", id1k);
            free(id1k);
        }
    }

    valid = validate_id(id2);
    if (!valid) puts("invalid id2!");
    else {
        char* id2k = get_next(id2);
        if (id2k) {
            printf("next of id2 is %s\n", id2k);
            free(id2k);
        }
    }

    valid = validate_id(id3);
    if (!valid) puts("invalid id3!");
    else {
        char* id3k = get_next(id3);
        if (id3k) {
            printf("next of id3 is %s\n", id3k);
            free(id3k);
        }
    }
    valid = validate_id(id4);
    if (!valid) puts("invalid id4!");
    else {
        char* id4k = get_next(id4);
        if (id4k) {
            printf("next of id4 is %s\n", id4k);
            free(id4k);
        }
        else puts("get_next(id4) returns error");
    }
    // пример работы с невалидным ID в случае отсутствия предварительной проверки
    printf("checking of invalid ID: %s, %d\n", get_next("A0"), validate_id("A0"));

    /* checking of pair_to_int() / int_to_pair()
    char buf[4];
    buf[2] = 0;
    for (int i = 0; i < 171; i++) {
        set_value(buf, i);
        printf("%d/%s/%d\n",i, buf, pair_to_int(buf));
    }
    */
}
